﻿using System;
using System.Globalization;

namespace Kyoh.Lib.WinForms
{
    /// <summary><see cref="Kyoh.Lib.WinForms.FileNameEditor"/> でユーザのダイアログに表示するファイルフィルタ文字列を与える <see cref="Attribute"/> の実装を定義します。</summary>
    [AttributeUsage(AttributeTargets.Property, Inherited = false, AllowMultiple = true)]
    public sealed class FileNameFilterAttribute : Attribute
    {
        /// <summary><see cref="FileNameFilterAttribute"/> の新しいインスタンスを作成します。</summary>
        public FileNameFilterAttribute()
        {
            this.Culture = CultureInfo.InvariantCulture;
        }

        /// <summary><see cref="FileNameFilterAttribute"/> の新しいインスタンスを作成します。</summary>
        /// <param name="fileNameFilter">フィルタ文字列。</param>
        public FileNameFilterAttribute(string fileNameFilter)
        {
            this.FileNameFilter = fileNameFilter;
            this.Culture = CultureInfo.InvariantCulture;
        }

        /// <summary><see cref="FileNameFilterAttribute"/> の新しいインスタンスを作成します。</summary>
        /// <param name="fileNameFilter">フィルタ文字列。</param>
        /// <param name="culture">対象のカルチャを指定します。</param>
        public FileNameFilterAttribute(string fileNameFilter, string culture)
        {
            this.FileNameFilter = fileNameFilter;
            this.Culture = CultureInfo.GetCultureInfo(culture);
        }

        /// <summary>フィルタ文字列を取得します。</summary>
        public string FileNameFilter { get; private set; }
        /// <summary>対象のカルチャを取得します。</summary>
        public CultureInfo Culture { get; private set; }

        private Guid instanceGuid = Guid.NewGuid();
        /// <summary>この <see cref="Attribute"/> の一意の識別子を取得します。</summary>
        public override object TypeId { get { return instanceGuid; } }
    }
}
